"""
调用父类方法和属性
    子类重写父类方法和属性之后，以子类的方法和属性为准
"""
class Master():
    def __init__(self):
        self.kongfu = ['古法汤圆']

    def make_cake(self):
        print(f"Master使用：【{self.kongfu}】制作早餐")

class School():
    def __init__(self):
        self.kongfu = ['机器汤圆']

    def make_cake(self):
        print(f"School使用【{self.kongfu}】制作商品")

class Person(Master,School):
    def __init__(self):
        self.kongfu = ['私人定制汤圆']

    def make_cake(self):
        # 如果前面调用了服了父类的属性和方法，子类的属性值可能会被父类给覆盖，
        # 因此在调用属性之前，先调用子类自己的init方法进行初始化，保证自己的属性被初始化
        self.__init__()
        print(f"我自己制作：【{self.kongfu}】")

    # 调用父类的方法
    def make_master_cake(self):
        # 调用父类方法之前要执行父类的初始化方法，保证父类的属性已经被初始化
        # 一定要传入self这个值
        Master.__init__(self) # 制定之后子类的属性已经被父类给覆盖
        print(self.kongfu)# ['古法汤圆']
        Master.make_cake(self)

    # 调用父类School的方法
    def make_school_cake(self):
        School.__init__(self)
        School.make_cake(self)

person = Person()
print(person.kongfu)
person.make_cake()
print("-----------  调用父类的方法  -------------")
person.make_master_cake()
person.make_school_cake()
